package controlador;

import java.util.ArrayList;
import java.util.List;

import modelo.entidad.Estado;


import modelo.entidad.Municipio;
import modelo.entidad.Sugerencia;

import modelo.entidad.Zona;
import modelo.hibernate.dao.DaoUbicacion;

import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;



public class ControladorUbicacion  extends SelectorComposer<Component> {
	@Wire
	private Textbox txtestado;
	@Wire
	private Textbox txtmunicipio;
	@Wire
	private Textbox txtzona;
	@Wire
	private Button btnActualizarEstados;
	@Wire
	private Button btnGuardarMunicipio;
	@Wire
	private Button btnGuardarEstado;
	@Wire
	private Button btnGuardarZona;
	@Wire
	private Button btnEliminarZona;
	@Wire
	private Listbox lstboxEstados;
	@Wire
	private Listbox lstboxMunicipios;
	@Wire
	private Listbox lstboxZonas;
	
	
	
	
	private Zona zona;
	private Estado estado;
	private Municipio muni;
	
	private DaoUbicacion daoubic = new DaoUbicacion();

    List<Zona> todasZonas;
	
	List<Municipio> todosMunicipios;
	List<Estado> todosEstados;
	
	List<Municipio> cargarMunicipios;
	 List<Zona> cargarZonas;
	private static final long serialVersionUID = 1L;
	

	
public ControladorUbicacion() {
	super();

}

@Init
public void init() {
}



@Listen("onClick=#btnGuardarEstado")  
public void GuardarEstado() {

	Estado estado = new Estado(txtestado.getValue());
	estado.setNombre(txtestado.getText());
			try {
			daoubic.agregarEstado(estado);
			Clients.showNotification("Estado Guardado Exitosamente","info",null,null,1000);	
					} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
}

@Listen("onClick=#btnGuardarZona")  
public void GuardarZona() throws Exception {
	Municipio selected = lstboxMunicipios.getSelectedItem().getValue();
	System.out.println(selected);
	if(selected!=null)
	{
		System.out.println(selected.getNombre());
		
	Zona zona = new Zona (txtzona.getValue(),selected);
	zona.setNombre(txtzona.getText());
	
		try {
			daoubic.agregaraZona(zona);
			Clients.showNotification("Zona Guardada Exitosamente","info",null,null,1000);	
					} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	else 
		Messagebox.show("No ha seleccionado un Municipio", "Informacion", Messagebox.OK, Messagebox.INFORMATION);
		}//Fin de guardar zona*/

//@Listen("onClick=#btnEliminarZona")  

/*@Command
public void eliminarRegistroMunicipio(@BindingParam("municipio") Municipio es) {
 	
	if(es.getZonas()==null){
	
	
			try {
				todosMunicipios.remove(es);				
				daoubic.eliminarMunicipio(es);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}}
	else
		Messagebox.show("Municipio con Zonas asociadas", "Informacion", Messagebox.OK, Messagebox.INFORMATION);
		
 }*/
@Command
public void eliminarRegistroZona(@BindingParam("zona") Zona es) {
 	
	
	try {
        todasZonas.remove(es);
        daoubic.eliminarZona(es);
       
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
 }


@Command
public void confirm(@BindingParam("zona") Zona es) {
	
	try {
		daoubic.actualizarZona(es);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

}

@Listen("onClick=#btnGuardarMunicipio")  
public void GuardarMunicipio() throws Exception{

	Estado selected = lstboxEstados.getSelectedItem().getValue();
	System.out.println(selected);
	if(selected!=null)
	{
		System.out.println(selected.getNombre());
		
	Municipio muni = new Municipio (txtmunicipio.getValue(),selected);
	muni.setNombre(txtmunicipio.getText());
	
	/*
	  List<Municipio> mun= selected.getMunicipios();
      mun.add(muni);
      selected.setMunicipios(mun);
	
	
	  List<Municipio> sugs= daoubic.MunicipioxEstado(selected);
      sugs.add(muni);
      selected.setMunicipios(sugs);
      muni.setEstado(selected);
      muni.setNombre(txtmunicipio.getText());
      
	*/
	
		try {
			daoubic.agregarMunicipio(muni);
			Clients.showNotification("Municipio Guardado Exitosamente","info",null,null,1000);	
					} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	else 
		Messagebox.show("No ha seleccionado un Estado", "Informacion", Messagebox.OK, Messagebox.INFORMATION);
		
}

public List<Estado> getModeloEstados() throws Exception{
	  todosEstados=daoubic.obtenerTodosEstados();
      return new ListModelList<Estado>(todosEstados); 
}

public List<Municipio> getModeloMunicipios() throws Exception{
	  todosMunicipios=daoubic.obtenerTodosMunicipios();
    return new ListModelList<Municipio>(todosMunicipios); 
}

public List<Zona> getModeloZonas() throws Exception{
	  todasZonas=daoubic.obtenerTodasZonas();
  return new ListModelList<Zona>(todasZonas); 
}

@Listen("onClick = #lstboxEstados")
public void selectedEstado() throws Exception
{
	Listitem s = lstboxEstados.getSelectedItem();
    if (s!= null){
    	Estado selected = lstboxEstados.getSelectedItem().getValue();
    	System.out.println(selected.getNombre());
    	
    	 cargarMunicipios = daoubic.BuscarMunicipios(selected);
    	 
    	 System.out.println(selected.getId());
    	 System.out.println(selected.getNombre());
    	 System.out.println(cargarMunicipios.size());
    	 
    	 List<Municipio> listaEmail = daoubic.BuscarMunicipios(selected);
			System.out.println("Emails:");
			for (Municipio l : listaEmail){
				System.out.println(l.getNombre());
			}	
    	 
    	 
    	 lstboxMunicipios.setModel(new ListModelList<Municipio>(cargarMunicipios));
        	
    }
    	else
    		Messagebox.show(" Seleccione estado", "Informacion", Messagebox.OK, Messagebox.INFORMATION);
  }

@Listen("onClick = #lstboxMunicipios")
public void selectedMunicipio() throws Exception
{
	Listitem s = lstboxMunicipios.getSelectedItem();
    if (s!= null){
    	Municipio selected = lstboxMunicipios.getSelectedItem().getValue();
    	 cargarZonas = daoubic.BuscarZonas(selected);
    	 lstboxZonas.setModel(new ListModelList<Zona>(cargarZonas));
    	     	  	    	
    }
    	else
    		Messagebox.show(" Seleccione Municipio", "Informacion", Messagebox.OK, Messagebox.INFORMATION);
  }

/*@Command
@NotifyChange({"modeloEstados"})
public void changeList() throws Throwable {
 todosEstados = daoubic.obtenerTodosEstados();

}*/

}
	 
